package com.zmn.oms.dubbo.interfaces.quotation;

import com.zmn.common.dto2.ResponseDTO;
import com.zmn.oms.common.dio.quotation3.*;
import com.zmn.oms.common.dro.quotation3.OperateResultDRO;
import com.zmn.oms.common.dto.OmsOperator;
import com.zmn.oms.common.exception.OmsBaseException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

/**
 * @author sunlife
 * @date:2021/11/25 4:08 下午
 * description: 计价器3.0订单编辑接口（流程）
 */
@Api("计价器3.0订单流程修改接口")
public interface Quotation3OrderWorkModifyRemoteService {

    /**
     * 微信推送故障确认模板消息
     */
    @ApiOperation("微信推送故障确认模板消息")
    ResponseDTO sendFaultConfirmMessage(OmsOperator operator);

    /**
     * 开始检修
     * @param operator
     * @throws OmsBaseException
     */
    ResponseDTO startCheck(OmsOperator operator) throws OmsBaseException;

    /**
     * 确认故障检修方式
     * @param dio
     * @throws OmsBaseException
     */
    ResponseDTO<OperateResultDRO> confirmCheckType(ConfirmCheckTypeDIO dio) throws OmsBaseException;

    /**
     * 确认故障检修方式
     * @param dio
     * @throws OmsBaseException
     */
    ResponseDTO<OperateResultDRO> submitFaultCode(SubmitFaultCodeDIO dio) throws OmsBaseException;



    /**
     * 提交检修信息
     */
    @ApiOperation("确认故障信息")
    ResponseDTO<OperateResultDRO> confirmFaultInfo(ConfirmFaultInfoDIO confirmFaultInfoDIO);

    /**
     * 提交检修信息
     */
    @ApiOperation("提交检修信息")
    ResponseDTO submitCheckReport(@Valid CheckReportDIO checkReportDIO);

    /**
     * 工程师确认检测报告
     */
    @ApiOperation("工程师确认检测报告")
    ResponseDTO confirmCheckReportByEngineer(@Valid ConfirmCheckReportDIO confirmCheckReportDIO);

    /**
     * 工程师确认是否同意维修
     */
    @ApiOperation(value = "工程师确认是否同意维修（仅记录日志）")
    ResponseDTO submitConfirmRepairResultByEngineer(ConfirmRepairDIO confirmRepairDIO);

    /**
     * 发送同意维修验证码
     */
    @ApiOperation(value = "发送同意维修验证码")
    ResponseDTO sendCaptcha(SendAgreeCapthaDIO sendAgreeCapthaDIO);

    /**
     * 确认是否同意维修
     */
    @ApiOperation(value = "确认是否同意维修", notes = "用户、工程师均可以使用此接口")
    ResponseDTO submitConfirmRepairResult(ConfirmRepairDIO confirmRepairDIO);

    /**
     * 通过验证码确认是否同意维修
     */
    @ApiOperation(value = "确认是否同意维修", notes = "用户、工程师均可以使用此接口")
    ResponseDTO submitConfirmRepairResultWithCaptcha(ConfirmRepairDIO confirmRepairDIO);

    /**
     * 提交检修信息
     */
    @ApiOperation(value = "确认是否同意维修", notes = "用户、工程师均可以使用此接口")
    ResponseDTO confirmUserAgreeResultByEngineer(ConfirmRepairDIO confirmRepairDIO);

    /**
     * 工程师添加人工优惠 记录在订单
     */
    @ApiOperation(value = "使用工程师优惠")
    ResponseDTO<String> addDiscountByEngineer(EngineerDiscountDIO engineerDiscountDIO);

    /**
     * 人工优惠使用到工单上
     */
    @ApiOperation(value = "工程师人工优惠使用到工单上")
    ResponseDTO useEngineerDiscount(EngineerDiscountDIO engineerDiscountDIO);

    /**
     * 保存人工优惠
     */
    @ApiOperation(value = "保存人工优惠")
    ResponseDTO saveDiscount(ArtificialDiscountDIO artificialDiscountDIO);

    /**
     * 通过短信向用户发送优惠信息
     */
    @ApiOperation(value = "通过短信向用户发送优惠信息")
    ResponseDTO sendDiscountToUser(MobileDIO mobileDIO);

    /**
     * 添加订单工程师验收项目
     * @param addOrderAcceptMaintainDIO
     * @return
     */
    @ApiOperation(value = "添加订单工程师验收项目")
    ResponseDTO addOrderAcceptMaintainItem(@NotNull(message = "验收检测项目不能为空") @ApiParam(value = "验收检测项目") AddOrderAcceptMaintainDIO addOrderAcceptMaintainDIO);

    /**
     * 清空工程师优惠
     * @param operator
     * @return
     */
    @ApiOperation(value = "清空工程师优惠")
    ResponseDTO clearEngineerDiscount(OmsOperator operator);
}
